package com.qifei.xmlg_backend.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;

import java.security.Key;
import java.util.Date;
import java.util.Map;

// 替换为使用System.err来记录错误信息
// 或者你可以选择配置并使用日志框架（如Log4j或SLF4J）

public class JwtUtils {
    private static final String base64Key = "Sz6ZUsdp1KoxD4OoHiTqWKlzuIPW4U9AO7OxVDKhEeY=";

    // 密钥
    private static final Key signKey = Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64Key));

    // 过期时间
    private static Long expire = 43200000L; // 12小时

    /**
     * 生成JWT令牌
     * @param claims JWT第二部分负载 payload 中存储的内容
     * @return
     */
    public static String generateJwt(Map<String, Object> claims) {
        String username = (String) claims.get("username");
        String jwt = Jwts.builder()
                .setSubject(username) // 设置subject为username
                .addClaims(claims)
                .signWith(SignatureAlgorithm.HS256, signKey)
                .setExpiration(new Date(System.currentTimeMillis() + expire))
                .compact();
        return jwt;
    }

    /**
     * 解析JWT令牌
     * @param jwt JWT令牌
     * @return JWT第二部分负载 payload 中存储的内容
     */
    public static Claims parseJWT(String jwt){
            Claims claims = Jwts.parser()
                    .setSigningKey(signKey)
                    .parseClaimsJws(jwt)
                    .getBody();
            return claims;

    }
}
